Для возможности самостоятельного слежения за прорисовкой строк класса CListBox необходимо установить стиль Owner Draw. Установка этого стиля говорит о том, что за перерисовку строк будет отвечать программа, а не Control. Вот где ставится этот стиль:

После установки этого стиля нам тут же надо перегрузить две виртуальные функции. Одна отвечает за прорисовку элементов списка, вторая за сравнение. Если этого не сделать, то в ходе выполнения произойдут ошибки. Кстати мы работаем со старым проектом из прошлых шагов.
void CTestList::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your code to draw the specified item
}
int CTestList::CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct)
{
// TODO: Add your code to determine the sorting order of the specified items
// return -1 = item 1 sorts before item 2
// return 0 = item 1 and item 2 sort the same
// return 1 = item 1 sorts after item 2
return 0;
}
Напишем функцию, которая выводит строки красным цветом ??? Вот код:
void CTestList::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
CRect rect;
rect=lpDrawItemStruct->rcItem;
dc.SetTextColor(RGB(255,0,0));
dc.DrawText((LPSTR)lpDrawItemStruct->itemData,rect,
DT_LEFT | DT_WORDBREAK);
dc.Detach();
}
Используем обычные функции CDC.
